package com.example.demo01.knowledges

fun mainperson() {


    class Person {
        var name: String = ""
        var age: Int = 0
    }

    class Dog(var name: String, var age: Int) {
        init {
            println("我是一个狗，我的名字是$name，我的年龄是$age")
            require(name.isNotEmpty()) { "名字不能为空" }//false的时候输出大括号中的内容
            require(age <= 20) { "年龄不能超过20岁" }//false的时候输出大括号中的内容
        }
    }

    //创建一个人
    var p1 = Person()
    //给人赋值
    p1.name = "张三"
    p1.age = 18
    //打印人
    println(p1)
    var p2 = Dog("", 21)
    /*p2.name = ""
    p2.age = 10*/
    println(p2)
}

fun mainFish() {
    //主+次构造函数
    class Fish(var name: String) {
        var age: Int = 0
        var color: String = ""

        init {
            println("init 先执行辣")
        }

        //调用了主构造函数，实例化时，会先执行，init，再执行自己，下面那个 以此类推
        constructor(name: String, age: Int) : this(name) {
            println("我是次构造函数1")
            this.age = age
        }

        constructor(name: String, age: Int, color: String) : this(name, age) {
            println("我是次构造函数2")
            this.color = color
        }
    }

    var f3 = Fish("小黄鱼", 1, "黄色")
}

fun main() {
    //open 修饰类 可以被继承
    //open 修饰方法 可以被重写
    open class Person(var name: String, var age: Number) {
        //行为
        open fun eat() {
            println("人在吃")
        }
    }

    class Student(name: String, age: Int) : Person(name, age) {
        override fun eat() {
            println("学生在吃")
        }
    }

    var s1 = Student("张三", 18)
    s1.eat()
}
